package com.example.customer01.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.customer01.pojo.Course;
import com.example.customer01.pojo.StudentCourse;

import java.util.List;

/**
 * 课程服务接口
 */
public interface CourseService extends IService<Course> {

    /**
     * 创建课程
     *
     * @param course 课程信息
     * @return 创建后的课程
     */
    Course createCourse(Course course);

    /**
     * 删除课程
     *
     * @param id 课程ID
     * @return 是否删除成功
     */
    boolean deleteCourse(Integer id);

    /**
     * 更新课程
     *
     * @param course 课程信息
     * @return 更新后的课程
     */
    Course updateCourse(Course course);

    /**
     * 根据ID获取课程
     *
     * @param id 课程ID
     * @return 课程信息
     */
    Course getCourseById(Integer id);

    /**
     * 获取所有课程
     *
     * @return 课程列表
     */
    List<Course> getAllCourses();

    /**
     * 根据课程代码获取课程
     *
     * @param courseCode 课程代码
     * @return 课程信息
     */
    Course getCourseByCode(String courseCode);

    /**
     * 分页查询课程
     *
     * @param page    分页参数
     * @param keyword 关键字
     * @return 分页结果
     */
    IPage<Course> getCoursePage(Page<Course> page, String keyword);

    /**
     * 获取学生的课程列表
     *
     * @param studentId 学生ID
     * @return 课程列表
     */
    List<Course> getCoursesByStudentId(Integer studentId);

    /**
     * 学生选课
     *
     * @param studentId 学生ID
     * @param courseId  课程ID
     * @param semester  学期
     * @return 是否选课成功
     */
    boolean enrollStudent(Integer studentId, Integer courseId, String semester);

    /**
     * 学生退课
     *
     * @param studentId 学生ID
     * @param courseId  课程ID
     * @return 是否退课成功
     */
    boolean dropCourse(Integer studentId, Integer courseId);

    /**
     * 更新学生成绩
     *
     * @param studentId 学生ID
     * @param courseId  课程ID
     * @param grade     成绩
     * @return 是否更新成功
     */
    boolean updateGrade(Integer studentId, Integer courseId, String grade);
} 